package com.envoy.testsuite.mvc;


/**
 * The model interface is implemented by models.  Models contain the business
 * logic of the code, allowing it to remain completely unreliant on any GUI
 * code or similar.
 * @author Angus
 *
 */
public interface Model {

  /**
   * Sets up the model ready for the controller to make requests of it.
   * @return the status of the model after setup.
   */
  ModelStatus setup();

  /**
   * Performs a specified operation.
   * @param operationData the data for the operation.
   * @return the results of the operation.
   */
  ModelTransferObject<ViewKey, UpdateType> performOperation(
      ModelTransferObject<Parameter, OperationType> operationData);

}
